#include "sockets.h"

/*Se incluyen las funciones de servidor mas el connect para clientes, el envio y la
recepcion de datos. A nivel servidor esta testeado y a nivel cliente tambien. No 
se hicieron pruebas sobre send y recv puesto que no deberian implicar ninguna 
problematica.*/

/*________________________________________________________________________________*/

int iniciarSocket(int* nuevoSocket){

	*nuevoSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

		if (*nuevoSocket == ERROR) {
			printf("Error en socket()\n");
			return 1;
		}
		else
			return 0;
}

/*________________________________________________________________________________*/

int realizarBind(int nuevoSocket,struct sockaddr_in local){

	int resultado;

	resultado = bind(nuevoSocket, (struct sockaddr*)&local, sizeof(struct sockaddr_in));

	if(resultado == ERROR){
		printf("Fallo bind()\n");
		return 1;
	}
	else
		return 0;
}

/*________________________________________________________________________________*/

int realizarListen(int nuevoSocket){

	int resultado;

	resultado = listen(nuevoSocket,1);

	if (resultado == ERROR) {
		printf("Fallo listen()\n");
		return 1;
	}
	else
		return 0;

}

/*________________________________________________________________________________*/

int aceptarCliente(int nuevoSocket,struct sockaddr_in local){

	int socketCliente;


	//len = sizeof(struct sockaddr);

	socketCliente=accept(nuevoSocket,(struct sockaddr*) &local,0);

	if(socketCliente == ERROR) {
			printf("Fallo accept()\n");
			return 1;
	}
	else
		return 0;
}

/*________________________________________________________________________________*/

int conectarSocket(int nuevoSocket,struct sockaddr_in local){

	int resultado;

	resultado = connect(nuevoSocket, (struct sockaddr*)&local, sizeof(local)) ;

	if(resultado == ERROR){
		printf("Error en connect()\n");
		return 1;
	}
	else
		return 0;
}

/*________________________________________________________________________________*/

int enviarDatos(char*buffer,int tamanio,int socketEnvio){

	int resultado;
	resultado = send(socketEnvio,buffer,tamanio,0);

	if(resultado == ERROR){
		printf("Error en send()\n");
		return 1;
	}
	else{
		printf("Envio exitoso\n");
		return 0;
	}

}

/*________________________________________________________________________________*/

int recibirDatos(char*buffer,int socketRecv){

	int resultado;

	resultado = recv(socketRecv,buffer,1024,0);

	if(resultado > 0){

		printf("Recepcion exitosa\n");

		return 0;

	}

	else{
		printf("Recepcion fallida\n");
		return 1;
	}

}

/*________________________________________________________________________________*/

int cerrarSocket(int* nuevoSocket){

	int resultado;

	resultado = close(*nuevoSocket);

	if (resultado == ERROR){
		printf("Error en closesocket()\n");
		return 1;
	}
	else
		return 0;
}

/*________________________________________________________________________________*/


